1 module examples.InterfaceKit_Simple;
2 import phidget21;
3 import std.stdio : write, writeln, writefln, readln;
4 import std.string : toStringz, fromStringz;
5 
6 extern(C)
7 int AttachHandler(CPhidgetHandle IFK, void* userptr) {
8 	int serialNo;
9 	const char* name;
10 	
11 	CPhidget_getDeviceName(IFK, &name);
12 	CPhidget_getSerialNumber(IFK, &serialNo);
13 	
14 	writefln("%s %10d attached!", name.fromStringz, serialNo);
15 	
16 	return 0;
17 }
18 
19 extern(C)
20 int DetachHandler(CPhidgetHandle IFK, void* userptr) {
21 	int serialNo;
22 	const char* name;
23 	
24 	CPhidget_getDeviceName(IFK, &name);
25 	CPhidget_getSerialNumber(IFK, &serialNo);
26 	
27 	writefln("%s %10d detached!", name.fromStringz, serialNo);
28 
29 	return 0;
30 }
31 
32 extern(C)
33 int ErrorHandler(CPhidgetHandle IFK, void* userptr, int ErrorCode, const char* unknown)
34 {
35 	writefln("Error handled. %d - %s", ErrorCode, unknown.fromStringz);
36 	return 0;
37 }
38 
39 extern(C)
40 int InputChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int State) {
41 	writefln("Digital Input %d > State: %d", Index, State);
42 	return 0;
43 }
44 
45 extern(C)
46 int OutputChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int State) {
47 	writefln("Digital Output %d > State: %d", Index, State);
48 	return 0;
49 }
50 
51 extern(C)
52 int SensorChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int Value) {
53 	writefln("Sensor: %d > Value: %d", Index, Value);
54 	return 0;
55 }
56 
57 extern(C)
58 int display_property(CPhidgetInterfaceKitHandle phid) {
59 	int serialNo, version_, numInputs, numOutputs, numSensors, triggerVal, ratiometric;
60 	const char* ptr;
61 
62 	CPhidget_getDeviceType(cast(CPhidgetHandle)phid, &ptr);
63 	CPhidget_getSerialNumber(cast(CPhidgetHandle)phid, &serialNo);
64 	CPhidget_getDeviceVersion(cast(CPhidgetHandle)phid, &version_);
65 
66 	CPhidgetInterfaceKit_getInputCount(phid, &numInputs);
67 	CPhidgetInterfaceKit_getOutputCount(phid, &numOutputs);
68 	CPhidgetInterfaceKit_getSensorCount(phid, &numSensors);
69 	CPhidgetInterfaceKit_getRatiometric(phid, &ratiometric);
70 
71 	writeln(ptr.fromStringz);
72 
73 	writefln("Serial Number: %10d", serialNo);
74 	writefln("Version %8d", version_);
75 
76 	writefln("# Digital Inputs: %d", numInputs);
77 	writefln("# Digital Outputs: %d", numOutputs);
78 
79 	writefln("# Sensors: %d", numSensors);
80 	writefln("Ratiometric: %d", ratiometric);
81 
82 	foreach(i; 0 .. numSensors) {
83 		CPhidgetInterfaceKit_getSensorChangeTrigger(phid, i, &triggerVal);
84 		writefln("Sensor#: %d > Sensitivity Trigger: %d", i, triggerVal);
85 	}
86 
87 	return 0;
88 }
89 
90 int interfacekit_simple() {
91 	Phidget.load();
92 
93 	int result, numSensors;
94 	const char* err;
95 
96 	CPhidgetInterfaceKitHandle ifKit;
97 	CPhidgetInterfaceKit_create(&ifKit);
98 
99 	CPhidget_set_OnAttach_Handler(cast(CPhidgetHandle)ifKit, &AttachHandler, null);
100 	CPhidget_set_OnDetach_Handler(cast(CPhidgetHandle)ifKit, &DetachHandler, null);
101 	CPhidget_set_OnError_Handler(cast(CPhidgetHandle)ifKit, &ErrorHandler, null);
102 
103 	CPhidgetInterfaceKit_set_OnInputChange_Handler(ifKit, &InputChangeHandler, null);
104 
105 	CPhidgetInterfaceKit_set_OnSensorChange_Handler(ifKit, &SensorChangeHandler, null);
106 
107 	CPhidgetInterfaceKit_set_OnOutputChange_Handler(ifKit, &OutputChangeHandler, null);
108 
109 	CPhidget_open(cast(CPhidgetHandle)ifKit, -1);
110 
111 	write("Waiting for interface kit to be attached....");
112 	if((result = CPhidget_waitForAttachment(cast(CPhidgetHandle)ifKit, 10000)) != 0) {
113 		CPhidget_getErrorDescription(result, &err);
114 		writefln("Problem waiting for attachment: %s", err.fromStringz);
115 		return 0;
116 	}
117 
118 	display_property(ifKit);
119 
120 	writeln("Reading.....");
121 	writeln("Press any key to go to next step");
122 	readln;
123 
124 	writeln("Modifying sensor sensitivity triggers....");
125 
126 	CPhidgetInterfaceKit_getSensorCount(ifKit, &numSensors);
127 
128 	foreach(i; 0 .. numSensors) {
129 		CPhidgetInterfaceKit_setSensorChangeTrigger(ifKit, i, 100); 
130 	}
131 
132 	writeln("Reading.....");
133 
134 	writeln("Press any key to go to next step");
135 	readln;
136 
137 	writeln("Toggling Ratiometric....");
138 
139 	CPhidgetInterfaceKit_setRatiometric(ifKit, 0);
140 
141 	writeln("Reading.....");
142 
143 	writeln("Press any key to end");
144 	readln;
145 
146 	writeln("Closing...");
147 	CPhidget_close(cast(CPhidgetHandle)ifKit);
148 	CPhidget_delete(cast(CPhidgetHandle)ifKit);
149 
150 	return 0;
151 }
152 
153 void main() {
154 	interfacekit_simple();
155 }